package com.siao.mvc.core
{
	import com.siao.data.ArrayList;
	
	/**
	 * 树形节点接口
	 * @author SiaoLeon
	 */
	public interface INode
	{
		/**
		 * 父级节点
		 * @return
		 */
		function get parent():INode;
		
		/**
		 * 父级节点
		 * @param value 继承 INode 接口的节点对象
		 */
		function set parent(value:INode):void;
		
		/**
		 * 所有子节点集合的副本，对该集合的操作不会影响到该节点真正的子集合对象
		 * @return
		 */
		function get childs():ArrayList;
		
		/**
		 * 本节点路径
		 * @return
		 */
		function get path():Array;
		
		/**
		 * 添加一个节点
		 * @param node 继承 INode 接口的节点对象
		 * @return
		 */
		function add(node:INode):void;
		
		/**
		 * 移除一个节点
		 * @param node 继承 INode 接口的节点对象
		 * @return
		 */
		function remove(node:INode):void;
		
		/**
		 * 清除所有子节点
		 */
		function clear():void;
		
		/**
		 * 是否包含子节点
		 * @param node 继承 INode 接口的节点对象
		 * @return
		 */
		function contains(node:INode):Boolean;
		
		/**
		 * 获取其他节点的共有父节点
		 * @param node 继承 INode 接口的节点对象
		 * @return
		 */
		function getParent(node:INode):INode
		
		/**
		 * 获取从本节点到其他节点的路径
		 * @param node
		 * @return
		 */
		function getPath(node:INode):Array;
	
	}
}
